var expect = require("chai").expect;

module.exports = function (helpers) {
  var component = helpers.mount(require.resolve("./index"), {});
  expect(helpers.targetEl.querySelectorAll("div").length).to.equal(0);

  function checkOrder(letters) {
    component.input = { letters: letters };
    component.update();

    var divs = helpers.targetEl.querySelectorAll("div");

    expect(divs.length).to.equal(letters.length);

    for (var i = 0; i < letters.length; i++) {
      expect(divs[i].id).to.equal(letters[i]);
      expect(divs[i].innerHTML).to.equal(letters[i]);
    }
  }

  checkOrder(["a", "b", "c", "d", "e"]);

  // Single element swap
  checkOrder(["a", "c", "b", "d", "e"]);

  // Single element removal
  checkOrder(["a", "b", "d", "e"]);

  // Single element addition
  checkOrder(["a", "b", "c", "d", "e"]);

  // Double element addition
  checkOrder(["a", "b", "b1", "b2", "c", "d", "e"]);

  // Double element removal
  checkOrder(["a", "b", "c", "d", "e"]);

  // Swap b and d
  checkOrder(["a", "d", "c", "b", "e"]);

  // Swap b and d back to normal
  checkOrder(["a", "b", "c", "d", "e"]);

  // Single element addition to START
  checkOrder(["1", "a", "b", "c", "d", "e"]);

  // Double element addition to START
  checkOrder(["3", "2", "1", "a", "b", "c", "d", "e"]);

  // Single element removal from START
  checkOrder(["2", "1", "a", "b", "c", "d", "e"]);

  // Double element removal from START
  checkOrder(["a", "b", "c", "d", "e"]);

  // Single element addition to END
  checkOrder(["a", "b", "c", "d", "e", "f"]);

  // Double element addition to END
  checkOrder(["a", "b", "c", "d", "e", "f", "g", "h"]);

  // Single element removal from END
  checkOrder(["a", "b", "c", "d", "e", "f", "g"]);

  // Double element removal from END
  checkOrder(["a", "b", "c", "d", "e"]);
};
